package com.atguigu.study.controller;

import com.alibaba.cloud.ai.dashscope.embedding.DashScopeEmbeddingOptions;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.document.Document;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.embedding.EmbeddingRequest;
import org.springframework.ai.embedding.EmbeddingResponse;
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;

/**
 * @auther zzyybs@126.com
 * @create 2025-07-29 19:54
 * @Description TODO
 */
@RestController
@Slf4j
public class Embed2VectorController
{
    @Resource
    private EmbeddingModel embeddingModel;

    @Resource
    private VectorStore vectorStore;

    /**
     * 文本向量化
     * http://localhost:8011/text2embed?msg=射雕英雄传
     *
     * @param msg
     * @return
     */
    @GetMapping("/text2embed")
    public EmbeddingResponse text2Embed(String msg)
    {
        //EmbeddingResponse embeddingResponse = embeddingModel.call(new EmbeddingRequest(List.of(msg), null));

        EmbeddingResponse embeddingResponse = embeddingModel.call(new EmbeddingRequest(List.of(msg),
                DashScopeEmbeddingOptions.builder().withModel("text-embedding-v3").build()));

        System.out.println(Arrays.toString(embeddingResponse.getResult().getOutput()));

        return embeddingResponse;
    }

    @GetMapping("/embed2vector/add")
    public void add()
    {
        /*List<Document> documents = List.of(
                new Document("i study LLM"),
                new Document("i love java")
        );*/
        List<Document> documents = List.of(
                new Document("侠之大者，为国为民。 ——《射雕英雄传》"),
                new Document("他强由他强，清风拂山岗；他横由他横，明月照大江。 ——《倚天屠龙记》"),
                new Document("问世间，情为何物，直教生死相许？ ——《神雕侠侣》"),
                new Document("这些雪花落下来，多么白，多么好看。过几天太阳出来，每一片雪花都变得无影无踪。到得明年冬天，又有许许多多雪花，只不过已不是今年这些雪花罢了。 ——《神雕侠侣》"),
                new Document("红颜弹指老，刹那芳华。 ——《天龙八部》"),
                new Document("焚我残躯，熊熊圣火。生亦何欢，死亦何苦？ ——《倚天屠龙记》"),
                new Document("你瞧这些白云聚了又散，散了又聚，人生离合，亦复如斯。 ——《神雕侠侣》"),
                new Document("天子者，有道则人推而为主，无道则人弃而不用，诚可畏也。 ——《书剑恩仇录》"),
                new Document("夫千里之远，不足以举其大；千仞之高，不足以极其深。 ——《倚天屠龙记》"),
                new Document("世上最宝贵之物，乃是两心相悦的真正情爱，决非价值连城的宝藏。 ——《雪山飞狐》")
        );

        vectorStore.add(documents);
    }

    @GetMapping("/embed2vector/get")
    public List getAll(@RequestParam(name = "msg") String msg)
    {
        SearchRequest searchRequest = SearchRequest.builder()
                .query(msg)
                .topK(10)
                .build();

        List<Document> list = vectorStore.similaritySearch(searchRequest);

        System.out.println(list);

        return list;
    }
}

